package com.dylan.foundation;

/***
 * 这个例子中的线程如果不设置为守护线程，是一个死循环，会一直执行，当我们把它设置为守护线程后，在主线程执行完成后，守护线程也会退出，
 * 但是需要注意的是守护线程在退出的时候并不会执行finnaly块中的代码，所以将释放资源等操作不要放在finnaly块中执行，这种操作是不安全的。
 *
 * 线程可以通过setDaemon(true)的方法将线程设置为守护线程。并且需要注意的是设置守护线程要先于start()方法。
 *
 * */
public class DaemonThread extends Thread {

    @Override
    public void run() {
        while (true) {
            try {
                System.out.println("i am alive");
                Thread.sleep(500);
            } catch (InterruptedException e) {
                e.printStackTrace();
            } finally {
                System.out.println("finally block");
            }
        }
    }
    public static void main(String[] args) {
        DaemonThread daemonThread = new DaemonThread();
        daemonThread.setDaemon(true);
        daemonThread.start();
        //确保main线程结束前能给daemonThread能够分到时间片
        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}
